package com.bruce.ai.alibaba.mutil.agent.config;

import org.springframework.ai.chat.model.ChatModel;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.beans.factory.annotation.Qualifier;

import com.alibaba.cloud.ai.graph.agent.AgentTool;
import com.alibaba.cloud.ai.graph.agent.ReactAgent;
import com.bruce.ai.alibaba.mutil.agent.input.ArticleRequest;
import com.bruce.ai.alibaba.mutil.agent.output.ArticleOutput;
import com.bruce.ai.alibaba.mutil.agent.output.ReviewOutput;

@Configuration
public class MutilAgentConfig {
    /**
     * 完整类型化的写作工具
     */
    @Bean(name = "writerAgent")
    public ReactAgent writerAgent(ChatModel chatModel) {
        return ReactAgent.builder()
                .name("full_typed_writer")
                .model(chatModel)
                .description("完整类型化的写作工具")
                .instruction("根据结构化输入（topic、wordCount、style）创作文章，并返回结构化输出（title、content、characterCount）。")
                .inputType(ArticleRequest.class) // [!code highlight]
                .outputType(ArticleOutput.class) // [!code highlight]
                .build();
    }

    /**
     * 完整类型化的审核工具
     */
    @Bean(name = "reviewerAgent")
    public ReactAgent reviewerAgent(ChatModel chatModel) {
        return ReactAgent.builder()
                .name("full_typed_reviewer")
                .model(chatModel)
                .description("完整类型化的审核工具")
                .instruction("根据结构化输入（comment、approved、suggestions）审核文章，并返回结构化输出（comment、approved、suggestions）。")
                .outputType(ReviewOutput.class) // [!code highlight]
                .build();
    }

    /**
     * 完整类型化的协调工具
     */
    @Bean("orchestratorAgent")
    public ReactAgent orchestratorAgent(ChatModel chatModel,
                                       @Qualifier("writerAgent") ReactAgent writerAgent,
                                       @Qualifier("reviewerAgent") ReactAgent reviewerAgent) {
        return ReactAgent.builder()
                .name("full_typed_orchestrator")
                .model(chatModel)
                .instruction("协调写作和评审流程。先调用写作工具创作文章，然后调用评审工具进行评审。")
                .tools(
                        AgentTool.getFunctionToolCallback(writerAgent),
                        AgentTool.getFunctionToolCallback(reviewerAgent))
                .build();
    }

}
